/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import controller.util.PagingInfo;
import dao.CursoJpaController;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import dao.exceptions.NonexistentEntityException;
import java.util.ArrayList;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.model.SelectItem;
import modelo.Curso;
import modelo.TipoCurso;
import pagecontroller.JsfUtil;

/**
 *
 * @author Dirac
 */
public class CursoController {

    public CursoController() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        if (JsfUtil.getObjectFromSession("CursoJpaController") == null) {
            jpaController = new CursoJpaController();
        } else {
            jpaController = (CursoJpaController) JsfUtil.getObjectFromSession("CursoJpaController");
        }
    }
    private Curso curso = null;
    private List<Curso> cursoItems = null;
    private CursoJpaController jpaController = null;
    private List<Curso> cursos = null;
    private List<TipoCurso> tiposCurso = null;

    public Curso getCurso() {
        if (curso == null) {
            curso = new Curso();
        }
        return curso;
    }

    public void persiste() {
        if (curso.getId() == null) {
            System.out.println("criando");
            create();
        } else {
            System.out.println("salvando curso="+curso.getNome());
            update();
        }
    }

    public String update() {
        try {
            jpaController.edit(this.curso);
            System.out.println("salvo");
            this.curso = null;
            JsfUtil.addSuccessMessage("Curso Atualizado com Sucesso");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(CursoController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(CursoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "index.xhtml";
    }

    public String create() {
        try {
            jpaController.create(curso);
            curso = null;
            JsfUtil.addSuccessMessage("Curso cadastrado com sucesso.");
        } catch (Exception e) {
            JsfUtil.ensureAddErrorMessage(e, "Ocorreu um erro na percistencia dos dados.");
            return null;
        }
        return "index.xhtml";
    }

    public String edit() {
        Curso cur = (Curso) JsfUtil.getObjectFromRequestParameter("curso");
        this.curso = cur;
        return "index.xhtml";
    }

    public String destroy() {
        Curso cur = (Curso) JsfUtil.getObjectFromRequestParameter("curso");
        try {
            jpaController.destroy(cur.getId());
            JsfUtil.addSuccessMessage("Curso removido com sucesso.");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(CursoController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "index.xhtml";
    }

    public List<TipoCurso> getTiposCurso() {
        List<TipoCurso> list = new ArrayList<TipoCurso>();
        for (TipoCurso tipoCurso : TipoCurso.values()) {
            list.add(tipoCurso);
        }
        return list;
    }

    public List<Curso> getCursos(){
        this.cursos = jpaController.findCursoEntities();
        return this.cursos;
    }

    public CursoJpaController getJpaController() {
        return jpaController;
    }

    public List<Curso> findByTipoCurso(TipoCurso tipoCurso){
        jpaController.findByTipoCurso(tipoCurso);

        return null;

    }
}
